import argparse
import subprocess
import sys
import os

"""
    python 参数化运行
    命令行运行：
     (1) 项目根目录 执行
        python ./mitm_recorder/core/cli.py               查看help文档
        python ./mitm_recorder/core/cli.py -v            查看版本
        python ./mitm_recorder/core/cli.py -r 8888       开启录制脚本功能
        python ./mitm_recorder/core/cli.py -t case.csv
        python ./mitm_recorder/core/cli.py -m 5
     (2) 项目二级目录 执行
        python ./core/cli.py               查看help文档
        python ./core/cli.py -v            查看版本
        python ./core/cli.py -r 8888       开启录制脚本功能
        python ./core/cli.py -t case.csv
        python ./core/cli.py -m 5
"""

__version__ = 1.0

# 获取'执行该文件'目录的绝对路径
current_dir = os.path.abspath('.')
# print(current_dir)

# 执行路径：根目目录
# recorder_file = f"{current_dir}/mitm_recorder/core/recorder.py"
# 执行路径：二级目录
recorder_file = f"{current_dir}/core/recorder.py"

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description='just record and run for HTTP(S) testing.')

    # 设置命令：python ./cli.py -v
    parser.add_argument('-v', '--version', action='store_true', help='show the version')
    # 设置命令：python ./cli.py -r 8888 （ 将 8888 保存入 port 变量中 ）
    parser.add_argument('-r', '--record', dest='port', action='store', help='start to record the api infos')
    # 设置命令：python ./cli.py -t test.csv （ 将 test.csv 保存入 case_file 变量中 ）
    parser.add_argument('-t', '--test', dest='case_file', action='store', help='run test from the csv case file')
    # 设置命令：python ./cli.py -m 3 （ 将 3 保存入 seconds 变量中 ）
    parser.add_argument('-m', '--monitor', dest='seconds', action='store', help='start monitor every X seconds')

    # 获取命令中设置的变量
    args = parser.parse_args()
    # print(args.port)
    # print(args.case_file)
    # print(args.seconds)

    # 获取 命令行执行的参数列表
    # print("sys.argv -> " + str(sys.argv))
    # print()

    if len(sys.argv) == 1:
        parser.print_help()
    elif len(sys.argv) == 2:
        if sys.argv[1] in ['-h', '--help']:
            parser.print_help()
        elif sys.argv[1] in ['-v', '--version']:
            print(f'{__version__}')
    elif len(sys.argv) == 3:
        if sys.argv[1] in ['-r', '--record']:
            print('start recording...\n')
            try:
                subprocess.call(f'mitmdump -p {args.port} -s {recorder_file}', shell=True)
            except KeyboardInterrupt:
                print('\nend recording...')
